﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using TTQT;
using TTQT.TTQT_Code;
using TTQT.TTQT_Code.Info;

public partial class QLNguoiDungAdmin : MasterControl// System.Web.UI.UserControl
{
        protected System.Web.UI.WebControls.RequiredFieldValidator txtEmailRequired;
        private string content = null;

        protected void Page_Load(object sender, System.EventArgs e)
        {
            //trKSV.Visible = false;
            //this.txtUserName.Enabled = false;
            lblUpdateStatus.Text = string.Empty;
            lblError.Text = string.Empty;
            if (!Page.IsPostBack)
            {
                //bindCboKSV();
                
                
                bindGridUser();
                visiblePanels(true, false, false, false);
                bindCmd();
                bindVaiTro();
                cboChiNhanh.DataBind();
                txtMaKho.Text = cboChiNhanh.SelectedValue;
            }
        }
        private void bindAssignedCmds()
        {

            lstQuyen2.Items.Clear();
            DataAccessObject.instance().FillToListBox(lstQuyen2.Items);

            DataTable dtGroupRoles = DataAccessObject.instance().getCmdsByUserId(int.Parse(txtID.Text.Trim()));
            string roles = "|";
            foreach (DataRow row in dtGroupRoles.Rows) roles += row["Cmd_ID"].ToString() + "|";

            int i = 0;
            while (i < lstQuyen2.Items.Count)
            {
                if (roles.IndexOf("|" + lstQuyen2.Items[i].Value + "|") < 0) lstQuyen2.Items.RemoveAt(i);
                else i += 1;
            }
        }
        private void bindAssignedRoles()
        {
            lstVaiTro2.DataSource = DataAccessObject.instance().getGroupsByUserId(int.Parse(txtID.Text.Trim()));
            lstVaiTro2.DataBind();
        }
        private void bindVaiTro()
        {
            lstVaiTro1.DataSource = DataAccessObject.instance().getAllGroup();
            lstVaiTro1.DataBind();
        }
        private void bindCmd()
        {
            DataAccessObject.instance().FillToListBox(this.lstQuyen1.Items);
        }
        /*
        private void bindLstSanPham()
        {
            try
            {
                lstSanPham.DataSource = DataAccessObject.instance().getAllProductCode();
                lstSanPham.DataBind();

            }
            catch (Exception) { }
        }
        /*
        private void bindLstChiNhanh()
        {
            try
            {
                lstChiNhanh.DataSource = DataAccessObject.instance().getCNNbyTTQT(brnCode);
                lstChiNhanh.DataBind();

            }
            catch (Exception) { }
        }
        /*
        private void bindCboKSV()
        {
            try
            {
                cboKSV.DataTextField = "UserNameAndFullName";
                cboKSV.DataValueField = "User_Name";
                cboKSV.DataSource = DataAccessObject.instance().GetUserByBranchAndGroupName(brnCode, "KSVTTQT");

                cboKSV.DataBind();
            }
            catch (Exception ex)
            {
            }
        }
        */
        private void visiblePanels(bool GridUser, bool Edit, bool GanNhom, bool reset)
        {
            pnUserGrid.Visible = GridUser;
            pnEditUser.Visible = Edit;
            pnQuyen_Nhom.Visible = GanNhom;
            pnResetPassword.Visible = reset;
        }
        private void bindGridUser()
        {
            try
            {
                dgUser.DataSource = DataAccessObject.instance().User_GetForAdminTTCN(userId);
                dgUser.DataBind();
            }
            catch (Exception ex)
            {
                string err = ex.ToString();
            }
        }
        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }

        /// <summary>
        ///		Required method for Designer support - do not modify
        ///		the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.dgUser.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgUser_ItemCommand);
            this.dgUser.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.dgUser_ItemDataBound);

        }
        #endregion
        protected void cmdUpdate_Click(object sender, System.EventArgs e)
        { 
            UserInfo obj;
            try
            {
                //Nếu là thêm mới
                if (this.txtID.Text == string.Empty)
                {
                    this.lblUpdateStatus.Text = "";
                    if (DataAccessObject.instance().checkExistUser(this.txtUserName.Text))
                    {
                        this.lblError.Text = "Tài khoản này đã tồn tại";
                        return;
                    }
                    try
                    {
                        obj = new UserInfo();
                        obj.userName = this.txtUserName.Text;
                        obj.password = TTQTCommon.MD5Encrypt(this.txtPassword.Text);
                        obj.fullName = this.txtFullName.Text;
                        obj.email = this.txtEmail.Text;
                        obj.birthday = this.txtBirthday.Text;
                        obj.address = this.txtAddress.Text;
                        obj.phone = this.txtPhone.Text;
                        obj.Brn_Code = TTQTCommon.ToString(cboChiNhanh.SelectedValue);
                        
                        obj.CMT = txtCMT.Text.Trim();
                        obj.MaKho = txtMaKho.Text.Trim();
                        obj.CapKho = cboCapKho.SelectedValue;
                        obj.userId = DataAccessObject.instance().addUser(obj);
                        if (obj.userId > 0)
                        {
                            txtID.Text = obj.userId.ToString();
                            bindGridUser();
                            cmdQuyen_Click(null,null);
                            //Write an ADD NEW log to Database
                        }
                    }
                    catch (Exception ex)
                    {
                        this.lblUpdateStatus.Text = "Lỗi cập nhật!";
                    }
                }
                //Nếu là cập nhật
                else
                {
                    if (!this.txtUserName.Text.Equals(Session["edittingUserName"].ToString()))
                    {
                        if (DataAccessObject.instance().checkExistUser(this.txtUserName.Text))
                        {
                            lblError.Text = "Tài khoản này đã tồn tại";
                            return;
                        }
                    }
                    obj = DataAccessObject.instance().getUser(TTQTCommon.ToInt32(this.txtID.Text, -1));
                    if (obj == null) return;
                    // Cuối cùng là update bảng user
                    obj.userName = this.txtUserName.Text;
                    //obj.password = TTQTCommon.MD5Encrypt(this.txtPassword.Text);
                    obj.fullName = this.txtFullName.Text;
                    obj.email = this.txtEmail.Text;
                    obj.birthday = this.txtBirthday.Text;
                    obj.address = this.txtAddress.Text;
                    obj.phone = this.txtPhone.Text;
                    obj.Brn_Code = TTQTCommon.ToString(cboChiNhanh.SelectedValue);

                    obj.CMT = txtCMT.Text.Trim();
                    obj.MaKho = txtMaKho.Text.Trim();
                    obj.CapKho = cboCapKho.SelectedValue;
                    obj.SIBSID = txtSIBSID.Text;
                    if(DataAccessObject.instance().updateUser(obj)>0)
                        lblUpdateStatus.Text = "Cập nhật thành công!";
                    //bindGridUser();
                    //visiblePanels(true, false, false, false);
                }
            }
            catch (Exception ex)
            {
                lblUpdateStatus.Attributes.Add("style", "color:red;font-weight:bold;");
                this.lblUpdateStatus.Text = ex.ToString();
                //Log methods here
            }
        }

        protected void cmdCancel_Click(object sender, System.EventArgs e)
        {
            this.lblUpdateStatus.Text = "";
            visiblePanels(true, false, false, false);
            this.pnQuyen_Nhom.Visible = false;
        }

        private void WriteLog(string sType, string sContent)
        {
            string str_ip = Request.UserHostAddress;
            LogInfo o_log = new LogInfo(str_ip, userName, sType, sContent, "", this.brnCode);
            DataAccessObject.instance().addLog(o_log);
        }

        private void dgUser_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
        {
            //trPass.Visible = false;
            UserInfo obj = null;
            if (e.CommandName == "cmdEdit")
            {
                cmdQuyen.Visible = isKT3();
                obj = DataAccessObject.instance().getUser(int.Parse(e.Item.Cells[0].Text));
                Session["EdittingUserName"] = obj.userName;
                this.txtID.Text = obj.userId.ToString();
                this.txtUserName.Text = obj.userName;
                this.txtUserName.Enabled = false;
                this.txtPassword.Text = "";
                trPass1.Visible = false;
                trPass2.Visible = false;
                this.txtFullName.Text = obj.fullName;
                this.txtEmail.Text = obj.email;
                this.txtBirthday.Text = obj.birthday;
                this.txtAddress.Text = obj.address;
                this.txtPhone.Text = obj.phone;

                txtCMT.Text = obj.CMT;
                txtMaKho.Text = obj.MaKho.ToString();
                try { cboCapKho.SelectedValue = obj.CapKho; }
                catch { }
                txtSIBSID.Text = obj.SIBSID;
                try{cboChiNhanh.SelectedValue = obj.Brn_Code;}
                catch{}
                cmdQuyen.Visible = true;

                visiblePanels(false, true, false, false);
              
            }
            else if (e.CommandName == "cmdReset")
            {
                obj = DataAccessObject.instance().getUser(int.Parse(e.Item.Cells[0].Text));
                this.txtIdReset.Text = obj.userId.ToString();
                lblTenDangnhap.Text = obj.userName;
                visiblePanels(false, false, false, true);
            }
            else if (e.CommandName == "cmdDelete")
            {
                try
                {
                    UserInfo oCurrentUser = DataAccessObject.instance().getUser(int.Parse(e.Item.Cells[0].Text));
                    DataAccessObject.instance().deleteUser(int.Parse(e.Item.Cells[0].Text));
                    //DataAccessObject.instance().removeUserFromGroup()
                    if (isTTQT)
                    {
                        DataAccessObject.instance().removeUserFromGroup(oCurrentUser.userId, oCurrentUser.groupId);
                    }
                    bindGridUser();
                    //Write a Delete log to Log Table
                    WriteLog(TTQTCommon.log_XoaNguoiDung, "Xóa người dùng" + oCurrentUser.userName);
                }
                catch (Exception ex) { }
            }
        }

        private void fillListPagesByGroupId(int groupId)
        {
            lstQuyen.Items.Clear();
            // Trước hết cứ lấy hết các quyền đưa vào ListBox lstQuyen. Sau đó loại những quyền không hợp lệ
            DataAccessObject.instance().FillToListBox(lstQuyen.Items);

            // DataTable này chứa id của tất cả các chức năng mà nhóm này có quyền truy xuất
            DataTable dtGroupRoles = DataAccessObject.instance().getCmdsByGroupId(groupId);
            // roles là chuỗi chứa các id của các quyền mà nhóm này có quyền truy xuất.
            // roles có dạng |1|3|5|7|8|9|12|24|
            string roles = "|";
            foreach (DataRow row in dtGroupRoles.Rows) roles += row["Cmd_ID"].ToString() + "|";
            int i = 0;
            // Duyệt lại danh sách các quyền đã lấy ban đầu, cái nào không có trong roles thì loại bỏ
            while (i < lstQuyen.Items.Count)
            {
                if (roles.IndexOf("|" + lstQuyen.Items[i].Value + "|") < 0) lstQuyen.Items.RemoveAt(i);
                else i += 1;
            }
        }

        private void dgUser_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
        {
            try
            {
                Button cmdDel = (Button)e.Item.FindControl("cmdDelete");
                if (cmdDel != null) cmdDel.Attributes.Add("onclick", TTQTCommon.delete_Confirm);
            }
            catch (Exception ex)
            {
            }
        }

        protected void cmdAddUser_Click(object sender, System.EventArgs e)
        {
            trPass1.Visible = true;
            trPass2.Visible = true;
            cmdQuyen.Visible = false;
            //bindCboKSV();
            //trPass.Visible = true;
            this.txtID.Text = string.Empty;
            visiblePanels(false, true, false, false);
            try
            {
                this.txtID.Text = "";
                this.txtUserName.Text = "";
                this.txtUserName.Enabled = true;
                this.txtPassword.Text = "";
                this.txtFullName.Text = "";
                this.txtEmail.Text = "";
                this.txtBirthday.Text = "";
                this.txtAddress.Text = "";
                this.txtPhone.Text = "";
            }
            catch (Exception) { }
            visiblePanels(false, true, false, false);
        }

        protected void cmdUyQuyen_Click(object sender, System.EventArgs e)
        {
            visiblePanels(false, false, true, false);
        }

        protected void btnQuayLai_Click(object sender, System.EventArgs e)
        {
            visiblePanels(false, true, false, false);
            pnQuyen_Nhom.Visible = false;
        }

        
        protected void btnBack_Click(object sender, System.EventArgs e)
        {
            this.lblUpdateStatus.Text = "";
            visiblePanels(true, false, false, false);
        }

        protected void btnReset_Click(object sender, System.EventArgs e)
        {
            if (txtPassReset.Text.Trim().Length==0)
            {
                alert("Mat khau khong duoc de trong!");
                return;
            }
            if(!txtPassReset.Text.Equals(txtPassReset2.Text))
            {
                alert("Mat khau khong khop!");
                return;
            }
            UserInfo obj = DataAccessObject.instance().getUser(int.Parse(txtIdReset.Text.Trim()));
            if (null != obj)
            {
                obj.password = TTQTCommon.MD5Encrypt(txtPassReset.Text.Trim());
                if (DataAccessObject.instance().resetPassword(lblTenDangnhap.Text, obj.password) > 0)
                {
                    lblResetPassword.Text = "Doi password thanh cong!";
                    lblResetPassword.Visible = true;
                    //Ghi log
                }
            }
        }
        public bool isKT3()
        {
            if (brnCode.Trim().Equals("0")) return true;
            else return false;
        }

        protected void btnAddVaiTro_Click(object sender, System.EventArgs e)
        {

            try
            {
                foreach (ListItem item in this.lstVaiTro1.Items)
                {
                    if (item.Selected)
                    {
                        DataAccessObject.instance().addRoleToUser(int.Parse(item.Value.Trim()), int.Parse(txtID.Text.Trim()));
                        // Write a Role Adding log to Log Table
                        //WriteLog(TTQTCommon.ToInt32(Session["UserId"],-1),"Thêm quyền của nhóm người dùng ("+lblGroupName.Text+")",item.Text.Replace('.',' ').Trim(),"");
                    }

                }
                lblUpdateStatus.Text = "Cập nhật thành công!";
            }
            catch (Exception ex)
            {
                //
                string fdsa = ex.ToString();
                //
                lblUpdateStatus.Text = "Có lỗi khi cập nhật! Bạn vui lòng kiểm tra lại!";
            }
            bindAssignedRoles();
        }

        protected void cmdQuyen_Click(object sender, System.EventArgs e)
        {
            pnQuyen_Nhom.Visible = true;
            bindAssignedRoles();
            bindAssignedCmds();
            visiblePanels(false,false,true,false);
        }
        protected void btnRemoveVaiTro_Click(object sender, System.EventArgs e)
        {
            try
            {
                foreach (ListItem item in lstVaiTro2.Items)
                    if (item.Selected)
                    {
                        DataAccessObject.instance().removeRoleFromUser(TTQTCommon.ToInt32(item.Value, 0), int.Parse(txtID.Text.Trim()));
                        // Write a Role Removing log to Log Table
                        //WriteLog (TTQTCommon.ToInt32(Session["UserId"],-1),"Bớt quyền của nhóm người dùng ("+ lblGroupName.Text+")",item.Text.Replace('.',' ').Trim(),"");
                    }

                lblUpdateStatus.Text = "Cập nhật thành công!";
            }
            catch (Exception ex)
            {
                lblUpdateStatus.Text = "Có lỗi khi cập nhật! Bạn vui lòng kiểm tra lại!";
            }
            bindAssignedRoles();
        }

        protected void btnAddQuyen_Click(object sender, System.EventArgs e)
        {

            try
            {
                foreach (ListItem item in this.lstQuyen1.Items)
                {
                    if (item.Selected)
                    {
                        DataAccessObject.instance().addCmdToUser(int.Parse(item.Value.Trim()), int.Parse(txtID.Text.Trim()));
                        // Write a Role Adding log to Log Table
                        //WriteLog(TTQTCommon.ToInt32(Session["UserId"],-1),"Thêm quyền của nhóm người dùng ("+lblGroupName.Text+")",item.Text.Replace('.',' ').Trim(),"");
                    }
                }
                lblUpdateStatus.Text = "Cập nhật thành công!";
            }
            catch (Exception ex)
            {
                //
                string fdsa = ex.ToString();
                //
                lblUpdateStatus.Text = "Có lỗi khi cập nhật! Bạn vui lòng kiểm tra lại!";
            }
            bindAssignedCmds();
        }

        protected void btnRemoveQuyen_Click(object sender, System.EventArgs e)
        {
            try
            {
                foreach (ListItem item in lstQuyen2.Items)
                    if (item.Selected)
                    {
                        DataAccessObject.instance().removeCmdFromUser(TTQTCommon.ToInt32(item.Value, 0), int.Parse(txtID.Text.Trim()));
                        // Write a Role Removing log to Log Table
                        //WriteLog (TTQTCommon.ToInt32(Session["UserId"],-1),"Bớt quyền của nhóm người dùng ("+ lblGroupName.Text+")",item.Text.Replace('.',' ').Trim(),"");
                    }

                lblUpdateStatus.Text = "Cập nhật thành công!";
            }
            catch (Exception ex)
            {
                lblUpdateStatus.Text = "Có lỗi khi cập nhật! Bạn vui lòng kiểm tra lại!";
            }
            bindAssignedCmds();
        }
        
        private void alert(string noiDung)
        {
            Page.ClientScript.RegisterClientScriptBlock(System.Type.EmptyTypes.GetType(), "focusElement", @"<script>
             alert('" + noiDung + @"');             
          </script>");
        }
        protected void Button5_Click(object sender, EventArgs e)
        {
            this.lblUpdateStatus.Text = "";
            visiblePanels(true, false, false, false);
        }
    protected void cboChiNhanh_SelectedIndexChanged(object sender, EventArgs e)
    {
        txtMaKho.Text = cboChiNhanh.SelectedValue;
    }
}
